package com.zyx.config;

import org.springframework.context.annotation.*;

/**
 * @Author zhengyongxian
 * @Date 2020/5/25
 */
/**
 * 该类是一个配置类，它的作用和bean.xml是一样的
 * spring中的新注解
 * Configuration
 *     作用：指定当前类是一个配置类
 *     细节：当配置类作为AnnotationConfigApplicationContext对象创建的参数时，该注解可以不写。
 * ComponentScan
 *      作用：用于通过注解指定spring在创建容器时要扫描的包
 *      属性value：它和basePackages的作用是一样的，都是用于指定创建容器时要扫描的包。
*                 我们使用此注解就等同于在xml中配置了:
*                    <context:component-scan base-package="com.zyx"></context:component-scan>
 *  Bean
 *      作用：用于把当前方法的返回值作为bean对象存入spring的ioc容器中
 *      属性:name:用于指定bean的id。当不写时，默认值是当前方法的名称
 *      细节：当我们使用注解配置方法时，如果方法有参数，spring框架会去容器中查找有没有可用的bean对象。
 *          查找的方式和Autowired注解的作用是一样的
 *  Import
 *      作用：用于导入其他的配置类
 *      属性value：用于指定其他配置类的字节码。当我们使用Import的注解之后，有Import注解的类就父配置类，而导入的都是子配置类
 *  PropertySource
 *      作用：用于指定properties文件的位置
 *      属性value：指定文件的名称和路径。
 *           关键字：classpath，表示类路径下
 */
@Configuration

@ComponentScan(value={"com.zyx","com"})
// 配置排除扫描包
//@ComponentScan(basePackages = {"com.zyx"},
//        excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.zyx.dao.*")})

@Import(JdbcConfig.class)

//@PropertySource("classpath:jdbc.properties")
@PropertySources({
        @PropertySource("classpath:jdbc.properties"),
        @PropertySource(value = "classpath:root.properties", ignoreResourceNotFound = true)
})
public class SpringConfig {

}
